package pe.edu.upc.dsd.jjjar;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

import javax.swing.text.Position;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;

import pe.edu.upc.dsd.jjjar.model.Bus;
import pe.edu.upc.dsd.jjjar.model.Estacion;
import pe.edu.upc.dsd.jjjar.model.Horario;
import pe.edu.upc.dsd.jjjar.model.Posicion;
import pe.edu.upc.dsd.jjjar.model.Response;

import com.google.gson.Gson;


@Path("/info")
public class Informacion {
	
	@GET
    @Produces("text/plain")
    @Path("/buses/{codbus}")
	public String consultarRutas(@PathParam("codbus") String codbus){
		
		Response response = new Response();
		List<Estacion> estaciones = BaseDatos.bus_estaciones.get(codbus);
		response.setListEstacion(estaciones);
		
		Gson gson = new Gson();
		String json = gson.toJson(response);
		return json;
		
		
	}
	

	@GET
    @Path("/estaciones/{latitud}/{longitud}")
    @Produces("text/plain")
	public String buscarEstaciones(@PathParam("latitud") double latitud, @PathParam("longitud") double longitud){
		
		System.out.println(latitud + "," + longitud);
		
		double radio = 0.005;
		double desdeLatitud = (latitud>0)?latitud + radio:latitud - radio;
		double hastaLatitud = (latitud>0)?latitud - radio:latitud + radio;
		double desdeLongitud = (longitud>0)?longitud + radio:longitud - radio;
		double hastaLongitud = (longitud>0)?longitud - radio:longitud + radio;
		
		
		List<Estacion> estaciones = BaseDatos.estaciones;
		
		List<Estacion> cercanas = new ArrayList<Estacion>();
		
		/*
		Estacion e = new Estacion();
		Posicion p = new Posicion();
		p.setLatitud(desdeLatitud);
		p.setLongitud(desdeLongitud);
		System.out.println("P1:" + desdeLatitud + "," + desdeLongitud);
		e.setPosicion(p);
		cercanas.add(e);
		
		e = new Estacion();
		p = new Posicion();
		p.setLatitud(desdeLatitud);
		p.setLongitud(hastaLongitud);
		System.out.println("P2:" + desdeLatitud + "," + hastaLongitud);
		e.setPosicion(p);
		cercanas.add(e);
		
		e = new Estacion();
		p = new Posicion();
		p.setLatitud(hastaLatitud);
		p.setLongitud(desdeLongitud);
		System.out.println("P3:" + hastaLatitud + "," + desdeLongitud);
		e.setPosicion(p);
		cercanas.add(e);
		
		e = new Estacion();
		p = new Posicion();
		p.setLatitud(hastaLatitud);
		p.setLongitud(hastaLongitud);
		System.out.println("P4:" + hastaLatitud + "," + hastaLongitud);
		e.setPosicion(p);
		cercanas.add(e);
		*/
		
		for(Estacion estacion : estaciones){
			if(estacion.getPosicion().getLatitud()>= desdeLatitud && estacion.getPosicion().getLatitud()<=hastaLatitud &&
					estacion.getPosicion().getLongitud()>= desdeLongitud && estacion.getPosicion().getLongitud()<=hastaLongitud){
				cercanas.add(estacion);
			}
		}
		
		Response response = new Response();
		response.setListEstacion(cercanas);
		
		Gson gson = new Gson();
		String json = gson.toJson(response);
		
		return json;
		
	}
	
	@GET
    @Path("/horarios/{codbus}")
    @Produces("text/plain")
	public  String getHorario(@PathParam("codbus") String codbus){

		Response response = new Response();
		List<Horario> horarios = BaseDatos.bus_horarios.get(codbus);
		response.setListHorario(horarios);
		
		Gson gson = new Gson();
		String json = gson.toJson(response);
		return json;	
	}
	

	@GET
    @Path("/buses")
    @Produces("text/plain")
	public String buscarBuses(){
		
		List<Bus> listBuses = new ArrayList<Bus>(BaseDatos.buses.values());
		Collections.sort(listBuses);
		
		Response response = new Response();
		response.setListBuses(listBuses);
		
		Gson gson = new Gson();
		String json = gson.toJson(response);
		return json;
		
	}
	
}